package practice_2025_9.practice_9_20;

/**
 * 需要注意溢出时的判断逻辑
 */
class Solution {
    /**
     * 整数反转
     * @param x
     * @return
     */
    public int reverse(int x) {
        int op = 1;
        if (x < 0) {
            op = -1;
        }
        int n = Math.abs(x);
        
        int res = 0;
        while(n > 0) {
            if (res > Integer.MAX_VALUE / 10 || (res == Integer.MAX_VALUE / 10 && (n % 10) > 7)){
                return 0;
            }
            res = res * 10 + (n % 10);
            n /= 10;
        }
        // System.out.println(res + ":" + (Integer.MAX_VALUE));
        return (op * res);
    }


    /**
     * 字符串转化为整数
     * @param s
     * @return
     */
    public int myAtoi(String s) {
        // 丢弃前导空格
        // 读取符号
        // 跳过前置0
        // 若超过 int 范围 -> 返回 max | min
        int i = 0;
        int res = 0;
        // 先去除前导空格
        while(i < s.length() && s.charAt(i) == ' ') {
            i++;
        }
        if (i >= s.length()) {
            return res;
        }
        // 判断字符
        int op = 1;
        if(i < s.length() && (s.charAt(i) == '-' || s.charAt(i) == '+')) {
            if (s.charAt(i) == '-') {
                op = -1;
            } else {
                op = 1;
            }
            i++;
        }
        while(i < s.length()) {
            char ch = s.charAt(i);
            if (ch >= '0' && ch <= '9') {
                // 溢出判断
                if (res > Integer.MAX_VALUE / 10 || res == Integer.MAX_VALUE / 10 && (ch - '0') > 7) {
                    return Integer.MAX_VALUE;
                }
                if (res < Integer.MIN_VALUE / 10 || res == Integer.MIN_VALUE / 10 && (ch - '0') > 8) {
                    return Integer.MIN_VALUE;
                }
                // 计算
                res = res * 10 + (ch - '0') * op;
                // System.out.println(res);

            } else {
                break;
            }
            i++;
        }
        // System.out.println(Integer.MAX_VALUE + " " + Integer.MIN_VALUE);
        return res;
    }
}